const { spawn } = require('child_process');

// 测试scrcpy视频流输出
function testScrcpyOutput(deviceId) {
    console.log('🔍 测试scrcpy视频流输出...');
    console.log('设备ID:', deviceId);
    console.log('');

    // 使用与服务器相同的参数
    const scrcpy = spawn('scrcpy', [
        '--serial', deviceId,
        '--no-playback',          // 不显示窗口
        '--video-bit-rate', '800K', // 降低比特率提高稳定性
        '--max-size', '480',      // 降低分辨率提高性能
        '--max-fps', '15',        // 降低帧率提高稳定性
        '--no-audio',             // 禁用音频
        '--show-touches',         // 显示触摸操作
        '--stay-awake',           // 保持设备唤醒
        '--record', '-',          // 输出到stdout
        '--record-format', 'mp4'  // 使用MP4格式
    ]);

    let dataCount = 0;
    let totalBytes = 0;
    let startTime = Date.now();

    scrcpy.stdout.on('data', (data) => {
        dataCount++;
        totalBytes += data.byteLength;
        const elapsed = (Date.now() - startTime) / 1000;
        const rate = totalBytes / elapsed;
        
        console.log(`📹 数据包 ${dataCount}: ${data.byteLength} 字节`);
        console.log(`   累计: ${totalBytes} 字节, 速率: ${(rate / 1024).toFixed(2)} KB/s`);
        
        // 检查数据格式
        if (dataCount === 1) {
            console.log('🔍 分析第一个数据包...');
            const view = new Uint8Array(data);
            console.log('前16字节:', Array.from(view.slice(0, 16)).map(b => '0x' + b.toString(16).padStart(2, '0')).join(' '));
            
            // 检查MP4文件头
            if (view[0] === 0x00 && view[1] === 0x00 && view[2] === 0x00 && view[3] === 0x18) {
                console.log('✅ 检测到MP4文件头');
            } else if (view[4] === 0x66 && view[5] === 0x74 && view[6] === 0x79 && view[7] === 0x70) {
                console.log('✅ 检测到MP4 ftyp box');
            } else {
                console.log('❓ 未知数据格式');
            }
        }
        
        // 只显示前5个数据包
        if (dataCount >= 5) {
            console.log('📊 已收集足够的数据包进行分析');
            scrcpy.kill();
        }
    });

    scrcpy.stderr.on('data', (data) => {
        const message = data.toString().trim();
        console.log(`ℹ️ scrcpy: ${message}`);
    });

    scrcpy.on('close', (code) => {
        console.log('');
        console.log('=======================================');
        console.log('📊 测试结果汇总');
        console.log('=======================================');
        console.log(`总数据包: ${dataCount}`);
        console.log(`总字节数: ${totalBytes}`);
        console.log(`测试时长: ${((Date.now() - startTime) / 1000).toFixed(2)} 秒`);
        console.log(`平均速率: ${(totalBytes / 1024 / ((Date.now() - startTime) / 1000)).toFixed(2)} KB/s`);
        console.log(`退出码: ${code}`);
        console.log('');
        
        if (dataCount > 0) {
            console.log('✅ 视频流数据正常');
            console.log('建议: 检查前端视频播放器配置');
        } else {
            console.log('❌ 未收到视频流数据');
            console.log('建议: 检查scrcpy参数和设备连接');
        }
    });

    scrcpy.on('error', (error) => {
        console.error('❌ scrcpy启动失败:', error.message);
    });

    // 设置超时
    setTimeout(() => {
        if (scrcpy.exitCode === null) {
            console.log('⏰ 测试超时，强制终止');
            scrcpy.kill();
        }
    }, 10000);
}

// 主函数
function main() {
    const deviceId = process.argv[2];
    
    if (!deviceId) {
        console.log('❌ 请提供设备ID');
        console.log('使用方法: node test-video.js <设备ID>');
        console.log('示例: node test-video.js 5b6cda73');
        process.exit(1);
    }

    console.log('🚀 开始视频流测试...');
    console.log('=======================================');
    
    testScrcpyOutput(deviceId);
}

// 运行测试
if (require.main === module) {
    main();
}

module.exports = { testScrcpyOutput }; 